package br.com.dallasmotopecas.comum.cliente.vo;

import java.io.Serializable;
import java.sql.Date;
import java.util.ArrayList;
import java.util.List;

import br.com.dallasmotopecas.comum.agenda.vo.AgendaClienteAtendimentoVo;
import br.com.dallasmotopecas.comum.funcionario.vo.FuncionarioVo;
import br.com.dallasmotopecas.util.vo.EntidadeVo;

public class ClienteDadosVo extends EntidadeVo implements Serializable, Comparable<ClienteDadosVo>
{
	private static final long serialVersionUID = 1L;
	private ClienteVo clienteVo;
	private int mesCompetencia;
	private int anoCompetencia;
	
	
	private double valorCompraTotal;
	private Date dataUltimaCompra;
	private FuncionarioVo funcionarioVo;
	
	private String classificacao;
	private String corClassificacao;
	private int ranking;
	
	
	private String classificacaoMesHum;
	private String corClassificacaoMesHum;
	private int rankingMesHum;
	private double valorMesHum;
	
	private String classificacaoMesDois;
	private String corClassificacaoMesDois;
	private int rankingMesDois;
	private double valorMesDois;
	
	private transient Date dataInicial;
	private transient Date dataFinal;
	
	private List<ClienteDadosVo> listaClienteDados;
	private List<AgendaClienteAtendimentoVo> listaAtendimentos;
	private List<AgendaClienteAtendimentoVo> listaAtendimentosPeriodo;
	private ClienteDadosFinanceiroVo clienteDadosFinanceiroVo;
	
	public ClienteDadosVo()
	{
		
	}

	public ClienteVo getClienteVo()
	{
		if (clienteVo == null)
			clienteVo = new ClienteVo();
		
		return clienteVo;
	}

	public void setClienteVo(ClienteVo clienteVo)
	{
		this.clienteVo = clienteVo;
	}

	public int getMesCompetencia()
	{
		return mesCompetencia;
	}

	public void setMesCompetencia(int mesCompetencia)
	{
		this.mesCompetencia = mesCompetencia;
	}

	public int getAnoCompetencia()
	{
		return anoCompetencia;
	}

	public void setAnoCompetencia(int anoCompetencia)
	{
		this.anoCompetencia = anoCompetencia;
	}

	public double getValorCompraTotal()
	{
		return valorCompraTotal;
	}

	public void setValorCompraTotal(double valorCompraTotal)
	{
		this.valorCompraTotal = valorCompraTotal;
	}

	public Date getDataUltimaCompra()
	{
		return dataUltimaCompra;
	}

	public void setDataUltimaCompra(Date dataUltimaCompra)
	{
		this.dataUltimaCompra = dataUltimaCompra;
	}

	public Date getDataInicial()
	{
		return dataInicial;
	}

	public void setDataInicial(Date dataInicial)
	{
		this.dataInicial = dataInicial;
	}

	public Date getDataFinal()
	{
		return dataFinal;
	}

	public void setDataFinal(Date dataFinal)
	{
		this.dataFinal = dataFinal;
	}

	public String getClassificacao()
	{
		return classificacao;
	}

	public void setClassificacao(String classificacao)
	{
		this.classificacao = classificacao;
	}

	public String getCorClassificacao()
	{
		return corClassificacao;
	}

	public void setCorClassificacao(String corClassificacao)
	{
		this.corClassificacao = corClassificacao;
	}

	public FuncionarioVo getFuncionarioVo()
	{
		if (funcionarioVo == null) funcionarioVo = new FuncionarioVo();
		
		return funcionarioVo;
	}

	public void setFuncionarioVo(FuncionarioVo funcionarioVo)
	{
		this.funcionarioVo = funcionarioVo;
	}

	public List<ClienteDadosVo> getListaClienteDados()
	{
		if (listaClienteDados == null) listaClienteDados = new ArrayList<ClienteDadosVo>();
		
		return listaClienteDados;
	}

	public void setListaClienteDados(List<ClienteDadosVo> listaClienteDados)
	{
		this.listaClienteDados = listaClienteDados;
	}

	public double getValorMesHum()
	{
		return valorMesHum;
	}

	public void setValorMesHum(double valorMesHum)
	{
		this.valorMesHum = valorMesHum;
	}

	public double getValorMesDois()
	{
		return valorMesDois;
	}

	public void setValorMesDois(double valorMesDois)
	{
		this.valorMesDois = valorMesDois;
	}

	public List<AgendaClienteAtendimentoVo> getListaAtendimentos()
	{
		if (listaAtendimentos == null) listaAtendimentos = new ArrayList<AgendaClienteAtendimentoVo>();
		
		return listaAtendimentos;
	}

	public void setListaAtendimentos(
			List<AgendaClienteAtendimentoVo> listaAtendimentos)
	{
		this.listaAtendimentos = listaAtendimentos;
	}

	public List<AgendaClienteAtendimentoVo> getListaAtendimentosPeriodo()
	{
		if (listaAtendimentosPeriodo == null) listaAtendimentosPeriodo = new ArrayList<AgendaClienteAtendimentoVo>(); 
		
		return listaAtendimentosPeriodo;
	}

	public void setListaAtendimentosPeriodo(List<AgendaClienteAtendimentoVo> listaAtendimentosPeriodo)
	{
		this.listaAtendimentosPeriodo = listaAtendimentosPeriodo;
	}

	public ClienteDadosFinanceiroVo getClienteDadosFinanceiroVo()
	{
		if (clienteDadosFinanceiroVo == null) clienteDadosFinanceiroVo = new ClienteDadosFinanceiroVo();
		
		return clienteDadosFinanceiroVo;
	}

	public void setClienteDadosFinanceiroVo(ClienteDadosFinanceiroVo clienteDadosFinanceiroVo)
	{
		this.clienteDadosFinanceiroVo = clienteDadosFinanceiroVo;
	}

	public int getRanking()
	{
		return ranking;
	}

	public void setRanking(int ranking)
	{
		this.ranking = ranking;
	}

	public String getClassificacaoMesHum()
	{
		return classificacaoMesHum;
	}

	public void setClassificacaoMesHum(String classificacaoMesHum)
	{
		this.classificacaoMesHum = classificacaoMesHum;
	}

	public String getCorClassificacaoMesHum()
	{
		return corClassificacaoMesHum;
	}

	public void setCorClassificacaoMesHum(String corClassificacaoMesHum)
	{
		this.corClassificacaoMesHum = corClassificacaoMesHum;
	}

	public int getRankingMesHum()
	{
		return rankingMesHum;
	}

	public void setRankingMesHum(int rankingMesHum)
	{
		this.rankingMesHum = rankingMesHum;
	}

	public String getClassificacaoMesDois()
	{
		return classificacaoMesDois;
	}

	public void setClassificacaoMesDois(String classificacaoMesDois)
	{
		this.classificacaoMesDois = classificacaoMesDois;
	}

	public String getCorClassificacaoMesDois()
	{
		return corClassificacaoMesDois;
	}

	public void setCorClassificacaoMesDois(String corClassificacaoMesDois)
	{
		this.corClassificacaoMesDois = corClassificacaoMesDois;
	}

	public int getRankingMesDois()
	{
		return rankingMesDois;
	}

	public void setRankingMesDois(int rankingMesDois)
	{
		this.rankingMesDois = rankingMesDois;
	}

	@Override
	public int compareTo(ClienteDadosVo o)
	{
		if (this.getValorCompraTotal() < o.getValorCompraTotal())
			return -1;
		
		if (this.getValorCompraTotal() > o.getValorCompraTotal())
			return 1;
		
		return 0;
	}
	
	@Override
	public int hashCode()
	{
		final int prime = 31;
		int result = super.hashCode();
		result = prime * result + anoCompetencia;
		result = prime
				* result
				+ ((dataUltimaCompra == null) ? 0 : dataUltimaCompra.hashCode());
		result = prime * result + mesCompetencia;
		long temp;
		temp = Double.doubleToLongBits(valorCompraTotal);
		result = prime * result + (int) (temp ^ (temp >>> 32));
		result = prime * result + (int) (temp ^ (temp >>> 32));
		return result;
	}

	@Override
	public boolean equals(Object obj)
	{
		if (this == obj)
			return true;
		if (!super.equals(obj))
			return false;
		if (getClass() != obj.getClass())
			return false;
		ClienteDadosVo other = (ClienteDadosVo) obj;
		if (anoCompetencia != other.anoCompetencia)
			return false;
		if (dataUltimaCompra == null)
		{
			if (other.dataUltimaCompra != null)
				return false;
		}
		else if (!dataUltimaCompra.equals(other.dataUltimaCompra))
			return false;
		if (mesCompetencia != other.mesCompetencia)
			return false;
		if (Double.doubleToLongBits(valorCompraTotal) != Double
				.doubleToLongBits(other.valorCompraTotal))
			return false;
		
		return true;
	}
}
